/* Die Klasse PLZParser
 * 
 * Die Klasse PLZParser ist eine Subklasse von der TuringMaschine. 
 * Hier befindet sich die Initialisierug zur Erkennung einer gueltigen 
 * Postleitzahl.
 * 
 * Datei:  Simulationsumgebung.java          Autor:    Martin Fischer
 * Datum:  13.11:2011                        Version:  1.0
 *
 *
 */
package kommunikation.Parser;

public class PLZParser extends TuringMaschine
{
  /*
   * Diese Methode Initialisiert die Turingmaschine Es wird eine Menge
   * gebrauchter Zustaende erzeugt. Jedem Zustnd wird keine oder mehrere
   * Konfigurationen zugewiesen. Es Wird ein neues Alphabet erzeugt (ein
   * String mit allen gueltigen Zeichen. Es wird ein neues Band erezugt
   * dem das Alphabet und das zu pruefende Wort uebergeben.
   */
  public void initialisieren (String eingabewort)
  {
    String alphabet = "*0123456789";

    zustaende = new Zustand[8];
    for (int i = 0; i < zustaende.length; i++)
    {
      zustaende[i] = new Zustand (i);
    }
    /* Zusatnd 0 */
    for (int i = 1; i < alphabet.length (); i++)
    {
      zustaende[0].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[1]);
    }
    zustaende[0].konfigHinzufuegen ('*', '*', Konfig.R, zustaende[0]);
    /* Zustand 1 */
    for (int i = 1; i < alphabet.length (); i++)
    {
      zustaende[1].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[2]);
    }
    zustaende[1].konfigHinzufuegen ('*', '*', Konfig.N, zustaende[7]);
    /* Zustand 2 */
    for (int i = 1; i < alphabet.length (); i++)
    {
      zustaende[2].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[3]);
    }
    zustaende[2].konfigHinzufuegen ('*', '*', Konfig.N, zustaende[7]);
    /* Zustand 3 */
    for (int i = 1; i < alphabet.length (); i++)
    {
      zustaende[3].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[4]);
    }
    zustaende[3].konfigHinzufuegen ('*', '*', Konfig.N, zustaende[7]);
    /* Zustand 4 */
    for (int i = 1; i < alphabet.length (); i++)
    {
      zustaende[4].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[5]);
    }
    zustaende[4].konfigHinzufuegen ('*', '*', Konfig.N, zustaende[7]);
    /* Zustand 5 */
    for (int i = 1; i < alphabet.length (); i++)
    {
      zustaende[5].konfigHinzufuegen (alphabet.charAt (i),
	  alphabet.charAt (i), Konfig.R, zustaende[7]);
    }
    zustaende[5].konfigHinzufuegen ('*', '*', Konfig.N, zustaende[6]);
    /* Zustand 6 ist Endzustand */
    /* Zustand 7 ist Fehlerzustand */

    Alphabet a = new Alphabet (alphabet);
    band = new Band (a, eingabewort);
    aktuellerZustand = zustaende[0];
    fehlerZustand = zustaende[7];
  }

  /*
   * Die Main-Methode bringt das Programm zum laufen
   */
  // public static void main (String [] args)
  // {
  // PLZParser plzp = new PLZParser ();
  // plzp.initialisieren ("14570");
  // int i = 1;
  // int w = plzp.band.getBand ().length ();
  // //while (!plzp.getAktuellenZusatnd ().istEndzustand () &&
  // // !plzp.istImFehlerzustand ())
  // while (i <= w)
  // {
  // plzp.arbeiten ();
  // System.out.println ("i: " + i + ", w: " + w);
  // i++;
  // }
  // if (plzp.istImFehlerzustand ())
  // {
  // System.out.println ("ungueltige plz");
  // }
  // else
  // {
  // System.out.println ("plz ist gueltig");
  // }
  // System.out.println (!plzp.getAktuellenZusatnd ().istEndzustand ());
  // System.out.println (!plzp.istImFehlerzustand ());
  // }
}
